package org.footballmanager.pandafootball.system.controller;

import org.footballmanager.pandafootball.common.constants.Constants;
import org.footballmanager.pandafootball.system.domain.FootBfinfo;
import org.footballmanager.pandafootball.system.domain.enums.BFLX;
import org.footballmanager.pandafootball.system.form.impl.FootBfinfoSearchForm;
import org.footballmanager.pandafootball.system.service.FootBfinfoService;
import org.footballmanager.pandafootball.system.service.FootSjService;
import org.footballmanager.pandafootball.system.service.FootUserPersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * 报分控制类
 * 提供了一些基本的服务，如初始化、报分列表等方法。
 * spring mvc思想 通过controller来调用service里的方法，
 * service里的方法再通过调用Dao来实现对数据的操作
 * 返回值统统是String类型的返回页面有统一的安排方便代码提取
 *
 * @author chenjian
 * @since 2017年9月27日上午10:57:28
 */
@Controller
@SessionAttributes("footBfinfoSearchForm")
@RequestMapping("/foot/footBfinfo")
public class FootBfinfoController extends BaseController{
	/* 实体名称 */
	private static final String ENTITYNAME = "footBfinfo";

	@Autowired
	private FootBfinfoService footBfinfoService;
	@Autowired
	private FootUserPersonService footUserPersonService;
	@Autowired
	private FootSjService footSjService;

	/**
	 * 初始化
	 * @param map 参数
	 * @param footBfinfoSearchForm 条件参数
	 */
	@ModelAttribute
	public void init(Model map, @ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm){
		map.addAttribute("sjList", footSjService.getall());
		FootBfinfoSearchForm newFootBfinfoSearchForm = new FootBfinfoSearchForm();
		if(footBfinfoSearchForm != null){
			newFootBfinfoSearchForm = footBfinfoSearchForm;
		}
		map.addAttribute(String.format(Constants.FORMNAME, ENTITYNAME), newFootBfinfoSearchForm);
	}

	/**
	 * 报分列表
	 * @param type 类型
	 * @param map 参数
	 * @param footBfinfoSearchForm 条件参数
	 * @return 页面
	 */
	@RequestMapping(value="/search")
	public String search(@RequestParam Integer type, Model map, @ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm){
		footBfinfoSearchForm.setBflx(BFLX.values()[type]);
        footBfinfoService.search(ENTITYNAME, map, footBfinfoSearchForm);
		if(footBfinfoSearchForm.getBflx().equals(BFLX.NORMAL)){
			return "foot/bf/footBfinfo/List";
		}else if(footBfinfoSearchForm.getBflx().equals(BFLX.GRID)){
			return "foot/bf/footRankbfinfo/List";
		}else if(footBfinfoSearchForm.getBflx().equals(BFLX.HOTBODY)){
			return "foot/bf/footYysbfinfo/List";
		}else if(footBfinfoSearchForm.getBflx().equals(BFLX.TOP)){
			return "foot/bf/footTtbfinfo/List";
		}
		return null;
	}

	/**
	 * 删除报分记录
	 * @param id 主键
	 * @param request 请求
	 * @return 页面
	 */
	@RequestMapping(value = "/delete")
	public String delete(@RequestParam Long id, HttpServletRequest request) {
		FootBfinfo bf = footBfinfoService.get(id);
		footBfinfoService.delete(id, request);
		return "redirect:/foot/footBfinfo/search?type=" + bf.getBflx().ordinal();
	}

	/**
	 * 删除报分列表
	 * @param footBfinfoSearchForm 条件参数
	 * @param request 请求
	 * @return 页面
	 */
	@RequestMapping("/deleteall")
	public String deleteall(@ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm,
							HttpServletRequest request) {
        int type = footBfinfoService.deleteAll(footBfinfoSearchForm, request);
		return "redirect:/foot/footBfinfo/search?type=" + type;
	}

	/**
	 * 浏览报分记录
	 * @param map 参数
	 * @param id 主键
	 * @param request 请求
	 * @param footBfinfoSearchForm 条件参数
	 * @return 页面
	 */
	@RequestMapping(value="/view", method= RequestMethod.GET)
	public String openViewPage(Model map, @RequestParam Long id, HttpServletRequest request,
							   @ModelAttribute FootBfinfoSearchForm footBfinfoSearchForm){
		FootBfinfo bf = footBfinfoService.get(id);
		map.addAttribute("zhuqd", footUserPersonService.findFootPersonByUserId(bf.getQd1(), request));
		map.addAttribute("keqd", footUserPersonService.findFootPersonByUserId(bf.getQd2(), request));
		map.addAttribute(ENTITYNAME, bf);
		if(bf.getBflx().equals(BFLX.NORMAL)){
			return "foot/bf/footBfinfo/View";
		}else if(bf.getBflx().equals(BFLX.GRID)){
			return "foot/bf/footRankbfinfo/View";
		}else if(bf.getBflx().equals(BFLX.TOP)){
			return "foot/bf/footTtbfinfo/View";
		}
		return null;
	}

}
